home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 676-700 / 686 / newpos / newpos.s < prev    next >
Text File  |  1995-03-18  |  5KB  |  249 lines

  1. ; SizeWin use MoveWindow, SizeWindow from CLI/Shell
  2. ; (c) 1992 by Michael Watzl
  3. ;
  4. ; written with DEVPAC
  5.  
  6.  
  7. *    LVOs
  8.  
  9. OpenLib        = -552
  10. Output        = -60
  11. Write        = -48
  12. CloseLib    = -414
  13. MoveWin        = -168
  14. SizeWin        = -288
  15.  
  16.  
  17. *    some Offsets:
  18.  
  19. activewin    = $34
  20. winleft        = 4
  21. wintop        = 6
  22. winwidth    = 8
  23. winheight    = 10
  24.  
  25. _main    tst.l    d0
  26.     cmpi.l    #1,d0        ; more than 1 arg?
  27.     beq.s    usage
  28.     bsr    parse        ; parse the args
  29.                 ; and save them
  30.  
  31.     move    d0,d7        ; d7=Height
  32.     move    d1,d6        ; d6=Width
  33.     move    d2,d5        ; d5=yPos
  34.     move    d3,d4        ; d4=xPos
  35.  
  36.     bsr    openi
  37.     bsr.s    calc        ; calc deltas for move/size window!
  38.  
  39.     movea.l    _IntuitionBase,a6
  40.     movea.l    activewin(a6),a0
  41.     movea.l    a0,a4        ; save ActiveWindow
  42.  
  43.     move    d6,d0        ; delta width
  44.     move    d7,d1        ; delta height
  45.     jsr    SizeWin(a6)
  46.  
  47.     movea.l    a4,a0        ; -> ActiveWindow
  48.  
  49.     move    d4,d0        ; delta    x
  50.     move    d5,d1        ; delta y
  51.     jsr    MoveWin(a6)
  52.  
  53. closei    move.l    _IntuitionBase,a1
  54.     move.l    4.w,a6
  55.     jsr    CloseLib(a6)
  56. quit    rts
  57.  
  58. calc    movea.l    _IntuitionBase,a6
  59.     movea.l    activewin(a6),a0
  60.  
  61.     sub.w    winheight(a0),d7
  62.     sub.w    winwidth(a0),d6
  63.  
  64.     sub.w    wintop(a0),d5
  65.     sub.w    winleft(a0),d4
  66.     rts
  67.  
  68. usage    bsr    openi
  69.     bsr    toasc
  70.     lea    usgtxt,a0
  71.     bsr.s    _print
  72.     bsr     closei
  73.     moveq    #5,d0
  74.     rts
  75.  
  76. error    lea    errtxt,a0
  77.     bsr.s    _print
  78.     moveq    #10,d0
  79.     rts
  80.  
  81. _print    movem.l    R0-R15,-(sp)
  82.     move.l    a0,d5        ; save pointers
  83.     lea    DosName,a1
  84.     move.l    4.w,a6
  85.     moveq    #0,d0
  86.     jsr    OpenLib(a6)    ; open dos.library
  87.     tst.l    d0
  88.     beq.s    openerr
  89.     move.l    d0,_DosBase
  90.     move.l    d0,a6
  91.     jsr    Output(a6)    ; get Output_handle
  92.     tst.l    d0
  93.     beq.s    outerr
  94.     move.l    d0,_Output
  95.     movea.l    d5,a0
  96.     move.l    a0,d2        ; save->Write
  97.     moveq.b    #0,d3        ; counter for length
  98. .loop    addq.b    #1,d3
  99.     cmp.b    #-1,(a0)+    ; end of string?
  100.     bne.s    .loop
  101.     subq    #1,d3
  102.     move.l    _Output,d1
  103.     move.l    _DosBase,a6
  104.     jsr    Write(a6)
  105.  
  106. outerr    move.l    _DosBase,a1
  107.     move.l    4.w,a6
  108.     jsr    CloseLib(a6)
  109. openerr    movem.l    (sp)+,R0-R15
  110.     rts
  111.  
  112. parse    moveq    #1,d2        ; counter for args
  113.     movea.l    a0,a4        ; save pointer
  114. loop    cmpi.b    #$20,(a4)    ; next arg?
  115.     beq.s    incr        ; increase counter
  116.     cmpi.b    #$0a,(a4)    ; any more args?
  117.     beq.s    stop
  118.     cmpi.b    #'9',(a4)    ; ASCII-value > '9'
  119.     bhi.s    Gousage
  120.     cmpi.b    #'0',(a4)+    ; ASCII-value < '0'
  121.     blo.s    Gousage
  122.     bra.s    loop
  123.  
  124. incr    addq    #1,d2
  125.     cmpi.b    #5,d2
  126.     beq.s    Gousage
  127.     adda.l    #1,a4
  128.     bra.s    loop
  129. stop    cmpi.b    #4,d2
  130.     bne.s    Gousage
  131.  
  132. * Start PARSING
  133.     bsr.s    getarg    ; arg 4
  134.     move.w    d6,d0
  135.     bsr.s    getarg    ; arg 3
  136.     move.w    d6,d1
  137.     bsr.s    getarg    ; arg 2
  138.     move.w    d6,d2
  139.     bsr.s    getarg    ; arg 1
  140.     move.w    d6,d3
  141. _ende    rts
  142.  
  143. Gousage    addq    #4,sp        ; kill the adress for rts
  144.     bra    usage
  145.  
  146. ;     interprets a argumentlist from back to front
  147.  
  148. getarg    moveq    #1,d4        ; value of digit
  149.     moveq    #0,d5        ; temporary (für mulu)
  150.     moveq    #0,d6        ; result
  151.  
  152. .loop    cmpa.l    a0,a4
  153.     beq.s    next        ; last one?
  154.     cmpi.b    #$20,-(a4)
  155.     beq.s    next        ; next ARg?
  156.     sub.b    #48,(a4)    ; ASCII -> register
  157.     move.b    (a4),d5
  158.     mulu    d4,d5
  159.     add.l    d5,d6
  160.     mulu    #10,d4        ; increase digit value
  161.     bra.s    .loop
  162.     rts
  163. next    rts
  164.  
  165. ;      changes LeftEdge, Top... to asc and writes them into usage.txt
  166.  
  167. toasc    move.l    _IntuitionBase,a6    , init
  168.     move.l    activewin(a6),a0
  169.  
  170.     move.l    winleft(a0),xposR    ; read all 4 vals
  171.     move.l    winwidth(a0),xposR+4
  172.  
  173.     moveq    #3,d6            ; counter for 4 registers 0-3
  174.     moveq    #3,d5            ; counter for 4 word-digits
  175.     moveq    #0,d0
  176.  
  177.     lea    xposR,a0        ; Raw for ARI
  178.     lea    asc+11,a1        ; Temporary ascii
  179.  
  180. zahlen    move.l    #1000,d4        ; load d4 with highest divisor
  181.     asl    #1,d6            ; double offset (word = 2 byte)
  182.     move    (a0,d6.w),d0        ; INTEGER
  183.     asr    #1,d6
  184.  
  185. ziffern    divu    d4,d0
  186.     move    d0,(a1,d5.w)        ; write result
  187.     tst.b    d0
  188.     addi    #48,(a1,d5.w)        ; and change to ascii
  189.     swap    d0            ; load the rest
  190.     andi.l    #$0000ffff,d0        ; kill rubish
  191.     divu    #10,d4
  192.     dbf    d5,ziffern
  193.     moveq    #3,d5
  194.     suba.l    #4,a1
  195.     dbf    d6,zahlen
  196.  
  197.     moveq    #3,d0        ; exchange: 4321 -> 1234
  198.     lea    asc,a0
  199. .loop    move.b    (a0),d1        ; 4xx1 -> 1xx4
  200.     move.b    3(a0),(a0)
  201.     move.b    d1,3(a0)
  202.     move.b    1(a0),d1    ; x32x -> x23x
  203.     move.b    2(a0),1(a0)
  204.     move.b    d1,2(a0)
  205.     addq    #4,a0
  206.     dbf    d0,.loop
  207.  
  208.     move.l    asc,xpos    ; write into the usagetxt
  209.     move.l    asc+4,ypos
  210.     move.l    asc+8,width
  211.     move.l    asc+12,height
  212.  
  213.     rts
  214.  
  215. openi    moveq    #0,d0        ; open intuition.library
  216.     move.l    4.w,a6
  217.     lea    IntName,a1
  218.     jsr    OpenLib(a6)
  219.     tst.l    d0
  220.     beq.s    goerror
  221.     move.l    d0,_IntuitionBase
  222.     rts
  223.  
  224. goerror    addq    #4,sp            ; kill address for rts
  225.     bra    error            ; and jump to "error"
  226.  
  227. IntName    dc.b    "intuition.library",0
  228. DosName    dc.b    "dos.library",0
  229. _DosBase    dc.l    0
  230. _IntuitionBase    dc.l    0
  231. _Output        dc.l    0
  232.  
  233. usgtxt    dc.b    "Usage:    ",27,"[32mNewPos ",27,"[31m xpos ypos width height"
  234.     dc.b    10,"    to place your window and size it"
  235.     dc.b    10,"    (c) 1992 by Michael Watzl",10
  236.     dc.b    10,"    Current Window: ",10,27,"[32m    LeftEdge: "
  237. xpos    dc.b    0,0,0,0," Topedge: "
  238. ypos    dc.b    0,0,0,0," Width: "
  239. width    dc.b    0,0,0,0," Height:  "
  240. height    dc.b    0,0,0,0,10,27,"[31m",-1
  241.  
  242. errtxt    dc.b    "Couldn't open intuition.library",10,-1
  243.  
  244. xposR    dc.w    0
  245. yposR    dc.w    0
  246. widthR    dc.w    0
  247. heightR    dc.w    0
  248. asc    ds.l    4    ; 4*4 Bytes!
  249.